﻿namespace Journey.Security
{
    using Journey.Domain;
    using System.Collections.Generic;
    using System.Linq;

    /// <summary>
    /// 用户基类。
    /// </summary>
    public abstract class UserBase : EntityBase, IUser
    {
        /// <summary>
        /// 用户名称。
        /// </summary>
        public virtual string Name { get; set; }

        /// <summary>
        /// 邮箱。
        /// </summary>
        public virtual string Email { get; set; }

        /// <summary>
        /// 是否可用。
        /// </summary>
        public virtual bool Disable { get; set; }

        /// <summary>
        /// 身份列表。
        /// </summary>
        public virtual ICollection<Role> Roles { get; set; }

        /// <summary>
        /// 确认当前用户是否拥有该权限。
        /// </summary>
        /// <param name="permissionName">权限名称。</param>
        /// <returns>如果当前用户拥有该权限，则为 true；否则为 false。</returns>
        public bool IsInPower(string permissionName)
        {
            return this.Disable && this.Roles.SelectMany(role => role.Permissions).Any(permission => permission.Name == permissionName);
        }
    }
}